const fs = require('fs');
const path = require('path');

/**
 * 转换基础物品数据格式
 * 将原始的键值对数组格式转换为对象格式
 */
function convertBasicItems(inputFile, outputFile) {
    try {
        console.log('开始读取文件...');

        // 读取原始数据
        const rawData = fs.readFileSync(inputFile, 'utf8');
        const originalData = JSON.parse(rawData);

        console.log(`成功读取数据，包含 ${Object.keys(originalData).length} 个物品`);

        // 转换数据格式
        const convertedData = {};

        for (const [itemName, properties] of Object.entries(originalData)) {
            if (Array.isArray(properties)) {
                // 将属性数组转换为对象
                const itemObject = {};

                properties.forEach(prop => {
                    if (prop.k && prop.v !== undefined) {
                        // 移除属性名中的冒号
                        const key = prop.k.replace(':', '');
                        itemObject[key] = prop.v;
                    }
                });

                convertedData[itemName] = itemObject;
            }
        }

        console.log('数据转换完成');

        // 写入转换后的数据
        fs.writeFileSync(outputFile, JSON.stringify(convertedData, null, 2), 'utf8');
        console.log(`转换后的数据已保存到: ${outputFile}`);

        // 显示转换示例
        const sampleItems = Object.keys(convertedData).slice(0, 3);
        console.log('\n转换示例:');
        sampleItems.forEach(itemName => {
            console.log(`\n${itemName}:`);
            console.log(JSON.stringify(convertedData[itemName], null, 2));
        });

        return convertedData;

    } catch (error) {
        console.error('转换过程中发生错误:', error.message);
        throw error;
    }
}

/**
 * 验证转换后的数据
 */
function validateConvertedData(data) {
    console.log('\n数据验证:');
    console.log(`总物品数量: ${Object.keys(data).length}`);

    // 检查第一个物品的结构
    const firstItemName = Object.keys(data)[0];
    const firstItem = data[firstItemName];

    console.log(`\n第一个物品 "${firstItemName}" 的结构:`);
    console.log(JSON.stringify(firstItem, null, 2));

    // 检查是否有必需的字段
    const requiredFields = ['名称', '价格', '等级', '负重', '介绍', 'id'];
    const missingFields = requiredFields.filter(field => !(field in firstItem));

    if (missingFields.length > 0) {
        console.log(`\n警告: 缺少字段: ${missingFields.join(', ')}`);
    } else {
        console.log('\n✓ 所有必需字段都存在');
    }
}

/**
 * 主函数
 */
function main() {
    const inputFile = path.join(__dirname, 'output', 'websocket_data_基础物品.json');
    const outputFile = path.join(__dirname, 'output', 'basic_items_converted.json');

    try {
        // 检查输入文件是否存在
        if (!fs.existsSync(inputFile)) {
            console.error(`输入文件不存在: ${inputFile}`);
            return;
        }

        console.log('=== 基础物品数据转换工具 ===');
        console.log(`输入文件: ${inputFile}`);
        console.log(`输出文件: ${outputFile}`);
        console.log('');

        // 执行转换
        const convertedData = convertBasicItems(inputFile, outputFile);

        // 验证转换结果
        validateConvertedData(convertedData);

        console.log('\n=== 转换完成 ===');

    } catch (error) {
        console.error('程序执行失败:', error.message);
        process.exit(1);
    }
}

// 如果直接运行此脚本
if (require.main === module) {
    main();
}

module.exports = {
    convertBasicItems,
    validateConvertedData
};

